package gameManager;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Point;
import java.util.ArrayList;

/**
 * Interface for all objects that can collide with each other.
 */
public interface Interactable {

    /**
     * Updates the object for the next frame.
     * @param trigger the current time.
     */
    public void update (int trigger);

    /**
     * Moves the object to its new location.
     */
    public void move();

    /**
     * Sets the speed of the object.
     */
    public void setSpeed(int speed);

    /**
     * Returns the current speed of the object.
     */
    public int getSpeed();

    /**
     * Returns the current position of the object.
     */
    public Point getInteractablePosition();

    /**
     * Sets the position to newPosition.
     */
    public void setInteractablePosition(Point newPosition);

    /**
     * Returns true if the object should be destroyed.
     */
    public boolean isDying();

    /**
     * Anything special(graphics, music, etc.) that occurs when the
     * object is destroyed.
     */
    public void destroy();

    /**
     * Returns the center of the object.
     */
    public Point getCenter();

    /**
     * Returns the current boundary dimensions of the object.
     */
    public Dimension getDimension();

    /**
     * Returns the name of the object.
     */
    public String getNameOfInteractable();

    /**
     * Returns the names of all objects this object can collide with.
     */
    public ArrayList<String> getNamesOfInteractableCanCollideWith();

    /**
     * Updates the object based on a collision with another object.
     */
    public void collisionHandler(Interactable collisionCharacter);

    /**
     * Returns the current image for the object.
     */
    public Image getObjectImage();
}
